// 对axios进行二次封装
import axios from 'axios'
// 引入仓库和路由
import store from '@/store'
import router from '@/router';

// 1.利用axios对象方法create创建一个实例
const requests = axios.create({
    baseURL: '/api',//基础路径
    timeout: 4000,//请求超时时间
})
// 请求拦截器：在请求之前可以检测到并引发回调
requests.interceptors.request.use((config) => {
    // 页面上方的加载进度条开始运行
    let token = store.state.userHandle.token;
    if (token) {
        config.headers.token = token;
    }
    return config;
})
// 响应拦截器：服务器成功回调函数
requests.interceptors.response.use((res) => {
    // 处理业务
    if (res.data.code === 401) {//说明认证过期或者失败
        store.commit("userHandle/setLogout");//清除token
        router.replace({
            name: 'login'
        })
        return false;
    }
    let { status, statusText, config: { url }, data, } = res;
    if (0) {
        console.log({
            requestURL: url,
            data,
            status,
            statusText
        });
    }
    return res.data;
}, (error) => {//请求失败的回调
    if (error.response) {
        console.log("请求失败", error);
    }
    return Promise.reject(error.response.data)// 返回接口返回的错误信息
})

export default requests;
